/**
 * @author caesar
 * @date 2025/7/2
 * @apiNote
 */
/*## 数组工具类
案例需求：
（1）定义MyArrays数组工具类，声明如下方法：
- int sum(int[] arr)：求所有元素总和
- int max(int[] arr)：求所有元素的最大值
- int min(int[] arr)：求所有元素的最小值
- int indexOf(int[] arr, int value)：查找value在arr数组中第一次出现的下标，如果不存在返回-1
- int lastIndexOf(int[] arr, int value)：查找value在arr数组中最后一次出现的下标，如果不存在返回-1
- int valueCount(int[] arr, int value)：查找value在arr数组中出现的次数，如果不存在返回0
- void sort(int[] arr)：实现元素从小到大排序
- void reverse(int[] arr, int start, int end)：反转[start,end]范围内的元素
- int[] copyOf(int[] arr, int newLength)：复制arr数组，新数组的长度newLength。如果newLength<=arr.length，则复制arr数组的[0, newLength-1]范围的元素，如果newLength>arr.length，则复制arr数组的所有元素到新数组，剩下的元素则默认就可以。
- String toString(int[] arr)：将元素拼接为"[元素1，元素2，......]"的字符串返回。
（2）在main方法中，调用方法测试，例如：
int[] arr = {1,2,10,4,5,10,7,8,9,10};
- 遍历查看所有元素
- 查看所有元素之和
- 查看数组最大值、最小值
- 查看10在数组中首次出现、最后1次出现的位置，以及10出现的次数
- 从小到大排序
- 反转数组，查看从大到小结果*/
public class MyArrays {
    public static int sum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
    public static int max(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }
    public static int min(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        return min;
    }
    public static int indexOf(int[] arr, int value) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) {
                return i;
            }
        }
        return -1;
    }
    public static int lastIndexOf(int[] arr, int value) {
        for (int i = arr.length - 1; i >= 0; i--) {
            if (arr[i] == value) {
                return i;
            }
        }
        return -1;
    }
    public static int valueCount(int[] arr, int value) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) {
                count++;
            }
        }
        return count;
    }
    public static void sort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    public static void reverse(int[] arr, int start, int end) {
        for (int i = start; i < start + (end - start) / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[end - i + start];
            arr[end - i + start] = temp;
        }
    }
    public static int[] copyOf(int[] arr, int newLength) {
        int[] newArr = new int[newLength];
        for (int i = 0; i < newLength; i++) {
            if (i < arr.length) {
                newArr[i] = arr[i];
            } else {
                newArr[i] = 0;
            }
        }
        return newArr;
    }
    public static String toString(int[] arr) {
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                str += arr[i];
            } else {
                str += arr[i] + ",";
            }
        }
        str += "]";
        return str;
    }

    public static void main(String[] args) {
        int[] arr = {1,2,10,4,5,10,7,8,9,10};
        System.out.println(toString(arr));
        System.out.println(sum(arr));
        System.out.println(max(arr));
        System.out.println(min(arr));
        System.out.println(indexOf(arr, 10));
        System.out.println(lastIndexOf(arr, 10));
        System.out.println(valueCount(arr, 10));
        sort(arr);
        System.out.println(toString(arr));
        reverse(arr, 0, arr.length - 1);
        System.out.println(toString(arr));
        System.out.println(toString(copyOf(arr, 5)));
    }
}

